/**
 * Created by Yu Jin Xian on 2016/12/1.
 */
var bodyParser = require('body-parser');
var express = require('express');
var app = express();

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

var tours = [
    {id: 0, name: 'Hood River', price: 99.99},
    {id: 1, name: 'Oregon Coast', price: 149.95}
];

// 示例11 简单的 GET 节点, 只返回 JSON 数据
app.get('/api/tours-json', function (req, res) {
    res.json(tours);
});

// 示例12 GET 节点、返回 JSON、XML 或者 text
app.get('/api/tours', function (req, res) {
    var toursXml = '<?xml version="1.0"?><tours>' +
        tours.map(function (item) {
            return '<tour price="' + item.price + '" id="' + item.id + '">' + item.name + '</tour>';
        }).join('') + '</tours>';

    var toursText = tours.map(function (item) {
        return item.id + ': ' + item.name + ' (' + item.price + ')';
    }).join('\r\n');

    res.format({
        'application/json': function () {
            res.json(tours);
        },
        'application/xml': function () {
            res.type('application/xml');
            res.send(toursXml);
        },
        'text/xml': function () {
            res.type('text/xml');
            res.send(toursXml);
        },
        'text/plain': function () {
            res.type('text/plain');
            res.send(toursText);
        }
    });
});

// 示例13 用于更新的 PUT 节点
app.put('/api/tour/:id', function (req, res) {
    var item = tours.some(function (item) {
        return item.id == req.params.id;
    });
    if (item) {
        if (req.query.name) {
            item.name = req.query.name;
        }
        if (req.query.price) {
            item.price = req.query.price;
        }
        res.json({success: true});
    } else {
        res.json({error: 'No such tour exists.'});
    }
});

// 示例14 用于删除的 DEL 节点
app.del('/api/tour/:id', function (req, res) {
    for (var i = 0; i < tours.length; i++) {
        if (tours[i] == req.params.id) {
            break;
        }
        if (i >= 0) {
            tours.splice(i, 1);
            res.json({success: true});
        } else {
            res.json({error: 'No such tour exists'});
        }
    }
});

app.listen(3000, function () {
    console.log('http://localhost:3000');
});